/**
 * 自动挂载 API 模块（支持递归子目录，按模块结构组织）
 * 自动导入当前目录及子目录下所有 .ts 文件（除了 index.ts）
 */

// 使用 Vite 的 import.meta.glob 递归导入所有 API 模块
const modules = import.meta.glob("./**/*.ts", { eager: true });

// 存储所有 API 方法（按模块结构组织）
const api: Record<string, any> = {};

// 辅助函数：设置嵌套对象的值
function setNestedValue(obj: Record<string, any>, path: string[], value: any) {
    const lastKey = path.pop()!;
    const target = path.reduce((acc, key) => {
        if (!acc[key]) acc[key] = {};
        return acc[key];
    }, obj);
    target[lastKey] = value;
}

// 遍历所有模块并按目录结构组织
Object.keys(modules).forEach(path => {
    // 排除所有 index.ts 文件
    if (path.includes("index.ts")) return;

    const module = modules[path] as Record<string, any>;

    // 提取路径结构
    // 例如: './user/auth.ts' -> ['user', 'auth']
    const pathParts = path.replace(/^\.\//, "").replace(/\.ts$/, "").split("/");

    // 获取文件名（最后一部分）
    const fileName = pathParts[pathParts.length - 1];

    // 如果只有一层（根目录文件），直接挂载
    if (pathParts.length === 1) {
        api[fileName] = {};
        Object.keys(module).forEach(key => {
            if (key !== "default") {
                api[fileName][key] = module[key];
            }
        });
    } else {
        // 多层目录，按结构挂载
        const modulePath = [...pathParts];
        const moduleObj: Record<string, any> = {};

        Object.keys(module).forEach(key => {
            if (key !== "default") {
                moduleObj[key] = module[key];
            }
        });

        setNestedValue(api, modulePath, moduleObj);
    }
});

// 导出所有 API 方法
export default api;

// 同时支持按需导出
// export * from "./routes";
// export * from "./user";
